From 9bb145a677c3c9fa3266ae6999414f441016d93f Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 26 Apr 2011 14:07:27 +0200 Subject: [PATCH] widget: Add hack to make label mnemonics work again Mnemonics for characters that go beyond the baseline (q, y, g) were not being shown, because they are drawn outside of the label's allocated size. This patch just disables the clip-to-size for labels, so that the label can draw outsize of its allocation. In most cases, that works around this bug. https://bugzilla.gnome.org/show_bug.cgi?id=648570 --- gtk/gtkwidget.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 7dddae7dea..073120282a 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5660,6 +5660,20 @@ gtk_cairo_should_draw_window (cairo_t *cr, event->window == window; } +static gboolean +gtk_widget_get_clip_draw (GtkWidget *widget) +{ + /* labels are not clipped, because clipping them would cause + * mnemonics to not appear on characters that go beyond the + * baseline. + * https://bugzilla.gnome.org/show_bug.cgi?id=648570 + */ + if (GTK_IS_LABEL (widget)) + return FALSE; + + return TRUE; +} + /* code shared by gtk_container_propagate_draw() and * gtk_widget_draw() */ @@ -5673,6 +5687,8 @@ _gtk_widget_draw_internal (GtkWidget *widget, if (!gtk_widget_is_drawable (widget)) return; + clip_to_size &= gtk_widget_get_clip_draw (widget); + if (clip_to_size) { cairo_rectangle (cr, -- 2.30.2